package com.cavas.domain.controller;

import java.security.Principal;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.SessionAttributes;

import com.cavas.domain.bean.Abscence;
import com.cavas.domain.bean.Cotisation;
import com.cavas.domain.bean.Finance;
import com.cavas.domain.bean.Membre;
import com.cavas.domain.bean.Pret;
import com.cavas.domain.bean.Remboursement;
import com.cavas.domain.bean.Retard;
import com.cavas.domain.dao.DaoPret;
import com.cavas.domain.service.ServiceAbscence;
import com.cavas.domain.service.ServiceCotisation;
import com.cavas.domain.service.ServiceFinance;
import com.cavas.domain.service.ServiceMembre;
import com.cavas.domain.service.ServicePret;
import com.cavas.domain.service.ServiceRemboursement;
import com.cavas.domain.service.ServiceRetard;


@Controller
@SessionAttributes("membre")
@RequestMapping(value="/membre")
public class OperationController {

	 @Autowired
	 ServicePret servicePret;
	 @Autowired
	 ServiceRemboursement serviceRemboursement;
	 @Autowired
	 ServiceMembre serviceMembre; 
	 @Autowired
	 ServiceFinance serviceFinance; 
	 @Autowired
	 ServiceRetard serviceRetard;
	 @Autowired
	 ServiceAbscence serviceAbscence;
	 @Autowired
	 ServiceCotisation serviceCotisation;
	 
	 	 	 
	 
	   @ModelAttribute("membre")
	  	private Membre setUp(ModelMap model, Principal principal){
			String membre = principal.getName();
			Membre mbre = serviceMembre.findByMail(membre);	
			Finance finance = serviceFinance.getFinance(mbre.getNom());
			model.addAttribute("membre", mbre);
			if (finance != null)
			model.addAttribute("finance", finance);
			return mbre;
	 	}
	 	
	 	
	   @RequestMapping(method=RequestMethod.GET)
		public String homeUser(ModelMap model, Principal principal){	
			return "redirect:/membre/domain";
		}

	    //, @ModelAttribute("membre") Membre membre, @ModelAttribute("finance") Finance finance*/
		@RequestMapping(value="/domain", method=RequestMethod.GET)
		public String user(ModelMap model, Principal principal){
			return "membre/domain";
		}
	
	@RequestMapping(value="/pret")
	public String pret(ModelMap model, HttpSession request){
		Membre mbre = (Membre)request.getAttribute("membre");
		List<Pret> liste_p = servicePret.allPret(mbre.getNom());
		List<Remboursement> liste_r = serviceRemboursement.allRemboursement(mbre.getNom());
		model.addAttribute("list_pret", liste_p);	
		model.addAttribute("list_rbm", liste_r);
		return "membre/pret";
	}
	

	@RequestMapping(value="/retard_abscence")
	public String abcence(ModelMap model, HttpSession request){
		Membre mbre = (Membre)request.getAttribute("membre");
		List<Abscence> list_abs = serviceAbscence.getAbscenceMembre(mbre.getNom());
		List<Retard> list_rtd = serviceRetard.getRetardMembre(mbre.getNom());
		model.addAttribute("list_abs", list_abs);
		model.addAttribute("list_rtd", list_rtd);
		return "membre/retard_abscence";
	}
	
	@RequestMapping(value="/assistance")
	public String assistance(ModelMap model, Principal principal){
		return "membre/assistance";
	}
	
	@RequestMapping(value="/cotisation")
	public String cotisation(ModelMap model,  HttpSession request){
		Membre mbre = (Membre)request.getAttribute("membre");
		List<Cotisation> list_cot = serviceCotisation.getCotisationMembre(mbre.getNom());
		model.addAttribute("list_cot", list_cot);
		return "membre/cotisation";
	}
	
	
	public void setServicePret(ServicePret serv){
		this.servicePret = serv;
	}
	
	public void setServiceRemboursement(ServiceRemboursement serv){
		this.serviceRemboursement = serv;
	}
	
	public void setServiceMembre(ServiceMembre serv){
		this.serviceMembre = serv;
	}
	
	public void setServiFinance(ServiceFinance serv){
		this.serviceFinance = serv;
	}
	
	public void setServiceAbscence(ServiceAbscence serv){
		this.serviceAbscence = serv;
	}
	
	public void setServiceRetard(ServiceRetard serv){
		this.serviceRetard = serv;
	}
	
	public void setServiceCotisation(ServiceCotisation serv){
		this.serviceCotisation = serv;
	}
	
	
}
